home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2410 / 2410.xpi / chrome / content / foxmarks-setup.js < prev    next >
Text File  |  2010-01-28  |  17KB  |  552 lines

  1. /* 
  2.  Copyright 2005-2009 Xmarks Inc.
  3.  
  4.  foxmarks-setup.js: implements behavior for the Xmarks Setup Wizard.
  5.    
  6.  */
  7.  
  8.  
  9. var gIsEmpty;
  10. var gHasProfiles;
  11. var pProfileNames;
  12. var gHelpUrl;
  13. var gPasswordsNeedUpload = false;
  14.  
  15. var gWizardMode = "normal";
  16. var gWizardForgotPassword = false;
  17.  
  18. function OnWizardCancel() {
  19.     if(gWizardMode == "normal"){
  20.         var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  21.             .getService(Components.interfaces.nsIPromptService);
  22.  
  23.         var checkResult = {};
  24.         checkResult.value = Xmarks.gSettings.wizardSuppress;
  25.         var sb = Xmarks.Bundle();
  26.  
  27.         var ret = ps.confirmCheck(window, sb.GetStringFromName("title.cancelsetup"),
  28.                 sb.GetStringFromName("msg.cancelsetup"),
  29.                 sb.GetStringFromName("msg.nowizard"),
  30.                 checkResult);
  31.  
  32.         Xmarks.gSettings.wizardSuppress = checkResult.value;
  33.         Xmarks.gSettings.majorVersion = 3;
  34.  
  35.         return ret;
  36.     }
  37.     else
  38.         return true;
  39. }
  40. function OnWizardLoad(){
  41.     var wizard = document.documentElement;
  42.     var sb = Xmarks.Bundle();
  43.     if(window.arguments[1] !== undefined)
  44.         gWizardMode = window.arguments[1];
  45.     else
  46.         gWizardMode = "normal";
  47.  
  48.     if(gWizardMode == "resetPIN"){
  49.         wizard.title = sb.GetStringFromName("wizard.resettitle");
  50.         wizard.goTo("resetPIN");
  51.     }
  52.     else if(gWizardMode == "askforPIN"){
  53.         wizard.title = sb.GetStringFromName("wizard.newtitle");
  54.         wizard.goTo("passwordTransition");
  55.     }
  56. }
  57.  
  58. function HandleError(retval) {
  59.     var wizard = document.documentElement;
  60.     wizard.goTo("errorPage");
  61.     document.getElementById("errormsg").value = retval.msg;
  62.     var errmsg = retval.msg.replace(/ /g, "_");
  63.     gHelpUrl = Xmarks.Bundle().formatStringFromName("url.error", [errmsg], 1);
  64.     wizard.canAdvance = true;
  65. }
  66.  
  67. function OnTransitionPageShow() {
  68.     /*
  69.  
  70.     We've just gained control back from the web-based setup wizard.
  71.     1) Confirm that we can log in.
  72.     2) Determine whether there are profiles.
  73.     3) Determine whether there are server-side bookmarks.
  74.  
  75.     */
  76.     // There is a timing issue; sometimes this doesn't get called first
  77.     OnWizardLoad();
  78.     if(gWizardMode != "normal")
  79.         return;
  80.  
  81.     var spinner = document.getElementById("spinner");
  82.     var status = document.getElementById("statusLabel");
  83.     var wizard = document.documentElement;
  84.     wizard.canAdvance = false;
  85.     document.getElementById("profileMenuList").value = String(Xmarks.gSettings.viewId);
  86.  
  87.     Xmarks.FetchAccountStatus("bookmarks", status, spinner, FetchedStatus);
  88.  
  89.     function FetchedStatus(response) {
  90.         if (response.status != 0) {
  91.             HandleError(response);
  92.             return;
  93.         }
  94.  
  95.         gIsEmpty = response.isreset;
  96.  
  97.         if("@mozilla.org/login-manager;1" in Components.classes){
  98.             wizard.getPageById("selectProfile").next = "syncPasswords";
  99.         }
  100.         else {
  101.             wizard.getPageById("selectProfile").next = gIsEmpty ? 
  102.                 "execute" : "selectSyncOption"; 
  103.         }
  104.  
  105.         Xmarks.FetchProfileNames(status, spinner,
  106.             document.getElementById("profileMenuPopup"),
  107.             FetchedProfileNames);
  108.     }
  109.  
  110.     function FetchedProfileNames(response) {
  111.         if (response.status != 0) {
  112.             HandleError(response);
  113.             return;
  114.         }
  115.  
  116.         gHasProfiles = (response.count > 0);
  117.         gProfileNames = response.profiles;
  118.         // TODO: what should we do with this haveSynced
  119.         wizard.getPageById("transition").next = 
  120.             (gHasProfiles && !Xmarks.gSettings.haveSynced) ?
  121.             "selectProfile" : wizard.getPageById("selectProfile").next;
  122.         wizard.canAdvance = true;
  123.         if(gWizardMode == "normal")
  124.             wizard.advance();
  125.     }
  126. }
  127.  
  128. function ForgotPIN(){
  129.     var wizard = document.documentElement;
  130.  
  131.     wizard.goTo("forgotPIN");
  132. }
  133.  
  134. function ForgotPINAdvance(){
  135.     var wizard = document.documentElement;
  136.     var resetPIN  = document.getElementById("forgotpinradio").selectedItem.value == "reset";
  137.     if(resetPIN){
  138.         wizard.currentPage.next = "resetPIN";
  139.     }
  140.     else {
  141.         Xmarks.gSettings.setSyncEnabled("passwords", false);
  142.         wizard.currentPage.next = gIsEmpty ? 
  143.             "execute" : "selectSyncOption"; 
  144.     }
  145.     return true;
  146. }
  147. function ForgotPINRewind(){
  148.     var wizard = document.documentElement;
  149.     wizard.goTo('pinOld'); 
  150.     return false;
  151. }
  152.  
  153. function ResetPINLoad(){
  154.     if(gWizardMode == "resetPIN"){
  155.         var wizard = document.documentElement;
  156.         var radio = document.getElementById("resetpinno");
  157.         radio.label = Xmarks.Bundle().GetStringFromName("wizard.changedmymind");
  158.         wizard.canAdvance = true;
  159.         wizard.canRewind = false;
  160.     }
  161. }
  162.  
  163. function SyncPasswordsLoad(){
  164.     var wizard = document.documentElement;
  165.     wizard.canRewind = false;
  166.  
  167. }
  168. function ResetPINRewind(){
  169.     var wizard = document.documentElement;
  170.     wizard.goTo('forgotPIN'); 
  171.     return false;
  172. }
  173.  
  174. function ResetPINAdvance(){
  175.     var wizard = document.documentElement;
  176.     var resetPIN  =
  177.         document.getElementById("resetpinradio").selectedItem.value == "1";
  178.     if(resetPIN){
  179.        Xmarks.gSettings.setMustUpload("passwords", true);
  180.        gWizardForgotPassword = true;
  181.         wizard.currentPage.next = "pinNew";
  182.     }
  183.     else {
  184.         if(gWizardMode == "normal"){
  185.             Xmarks.gSettings.setSyncEnabled("passwords", false);
  186.             wizard.currentPage.next = gIsEmpty ? 
  187.                 "execute" : "selectSyncOption"; 
  188.         }
  189.         else {
  190.             wizard.cancel();
  191.         }
  192.     }
  193.     return true;
  194.  
  195. }
  196. function SyncPasswordAdvance() {
  197.     var wizard = document.documentElement;
  198.     var syncPassword =
  199.         document.getElementById("syncpasswordradio").selectedItem.value == "1";
  200.     if(syncPassword){
  201.         wizard.currentPage.next = "passwordTransition";
  202.     }
  203.     else {
  204.         Xmarks.gSettings.setSyncEnabled("passwords", false);
  205.         wizard.currentPage.next = gIsEmpty ? 
  206.             "execute" : "selectSyncOption"; 
  207.     }
  208.     return true;
  209. }
  210.  
  211. function OnPasswordTransitionPageShow() {
  212.     var spinner = document.getElementById("pin_spinner");
  213.     var status = document.getElementById("pin_statusLabel");
  214.     var wizard = document.documentElement;
  215.     wizard.canAdvance = false;
  216.  
  217.     Xmarks.FetchAccountExtStatus("passwords", status, spinner,function(response){ 
  218.         if (response.status != 0) {
  219.             HandleError(response);
  220.             return;
  221.         }
  222.  
  223.         gPasswordsNeedUpload = response.isreset || response.ispurged;
  224.         wizard.currentPage.next = gPasswordsNeedUpload ? "pinNew" : "pinOld";
  225.  
  226.         wizard.canAdvance = true;
  227.         wizard.advance();
  228.     });
  229. }
  230.  
  231. function NewPINRewind(){
  232.     if(gWizardMode == "resetPIN"){
  233.         var wizard = document.documentElement;
  234.         wizard.goTo("resetPIN");
  235.         return false;
  236.         
  237.     }
  238.     else if(gWizardForgotPassword){
  239.         gWizardForgotPassword = false;       
  240.         var wizard = document.documentElement;
  241.         wizard.goTo("resetPIN");
  242.         return false;
  243.     }
  244.  
  245.     return GotoSyncPasswords();
  246.  
  247. }
  248. function OldPinLoad(){
  249.     if(gWizardMode == "askforPIN"){
  250.         var wizard = document.documentElement;
  251.         wizard.canRewind = false;
  252.     }
  253. }
  254. function NewOrResetPassword(){
  255.     var wizard = document.documentElement;
  256.     var currpin = Xmarks.gSettings.pinNoPrompt;
  257.     if(currpin){
  258.         if(gWizardMode == "resetPIN"){
  259.             wizard.currentPage.label =
  260.                 Xmarks.Bundle().GetStringFromName("wizard.resetpintitle");
  261.         }
  262.         else {
  263.             wizard.currentPage.label =
  264.                 Xmarks.Bundle().GetStringFromName("wizard.newpintitle");
  265.         }
  266.         wizard.currentPage.next = "resetpinVerified";
  267.     }
  268.     else if(gWizardMode == "askforPIN"){
  269.         wizard.canRewind = false;
  270.     }
  271. }
  272.  
  273. function NewPasswordAdvance(){
  274.     var wizard = document.documentElement;
  275.     var pin = document.getElementById("newpin").value;
  276.     var pin2 = document.getElementById("newpin2").value;
  277.  
  278.     if(!pin || pin.length < 4 || pin.length > 255){
  279.         Xmarks.Alert(Xmarks.Bundle().GetStringFromName("error.pinWrongSize"));
  280.         return false;
  281.     }
  282.  
  283.     if(!pin2 || pin != pin2){
  284.         Xmarks.Alert(Xmarks.Bundle().GetStringFromName("error.pinNoMatch"));
  285.         return false;
  286.     }
  287.  
  288.     if(pin == Xmarks.gSettings.password){
  289.         Xmarks.Alert(Xmarks.Bundle().GetStringFromName("error.pinEqualsPassword"));
  290.         return false;
  291.     }
  292.  
  293.     Xmarks.gSettings.pin = pin;
  294.     Xmarks.gSettings.rememberPin = document.getElementById("rememberPin").checked;
  295.  
  296.     Xmarks.gSettings.setSyncEnabled("passwords", true);
  297.     if(gPasswordsNeedUpload){
  298.         Xmarks.gSettings.setMustUpload("passwords", true);
  299.     }
  300.     gWizardForgotPassword = false;       
  301.     return true;
  302. }
  303.  
  304. function OldPinAdvance(){
  305.     Xmarks.gSettings.rememberPin = document.getElementById("rememberPinOld").checked;
  306.     return true;
  307. }
  308. function VerifyPIN(){
  309.     var spinner = document.getElementById("vpin_spinner");
  310.     var status = document.getElementById("vpin_statusLabel");
  311.     var wizard = document.documentElement;
  312.     var pin = document.getElementById("oldpin").value;
  313.     wizard.canAdvance = false;
  314.  
  315.     if(!pin || pin.length < 4 || pin.length > 255){
  316.         Xmarks.Alert(Xmarks.Bundle().GetStringFromName("error.pinWrongSize"));
  317.         wizard.canAdvance = true;
  318.         wizard.rewind();
  319.         return;
  320.     }
  321.  
  322.     Xmarks.VerifyPINStatus(pin, status, spinner,function(response){ 
  323.         if (response.status != 0) {
  324.             Xmarks.Alert(Xmarks.Bundle().GetStringFromName("error.pinInvalid"));
  325.             wizard.canAdvance = true;
  326.             wizard.rewind();
  327.             return;
  328.         }
  329.  
  330.         Xmarks.gSettings.pin = pin;
  331.  
  332.         var lm = Date.now();
  333.         if (!this.lastModified || lm > this.lastModified) {
  334.             this.lastModified = lm;
  335.             var os = Cc["@mozilla.org/observer-service;1"]
  336.                 .getService(Ci.nsIObserverService);
  337.             os.notifyObservers(null, "foxmarks-datasourcechanged", 
  338.                 lm + ";passwords");
  339.         }
  340.  
  341.         wizard.canAdvance = true;
  342.         wizard.advance();
  343.     });
  344. }
  345. function PinVerifiedAdvance(){
  346.     Xmarks.gSettings.setSyncEnabled("passwords", true);
  347.     if(gPasswordsNeedUpload){
  348.         Xmarks.gSettings.setMustUpload("passwords", true);
  349.     }
  350.     if(gWizardMode == "normal")
  351.         return true;
  352.     else {
  353.         window.arguments[2].doSync = true;
  354.         window.close();
  355.     }
  356.     return true;
  357. }
  358.  
  359. function GotoSyncPasswords(){
  360.     var wizard = document.documentElement;
  361.     wizard.goTo("syncPasswords");
  362.     return false;
  363. }
  364. function RelinkPinVerified(){
  365.     var wizard = document.documentElement;
  366.     if(gWizardMode == "normal"){
  367.         wizard.currentPage.next = gIsEmpty ? 
  368.             "execute" : "selectSyncOption"; 
  369.         }
  370.     else {
  371.         var button = wizard.getButton('next');
  372.         button.label = Xmarks.Bundle().GetStringFromName("wizard.finished");
  373.         button.accesskey = Xmarks.Bundle().GetStringFromName("wizard.finished.accesskey");
  374.         button = wizard.getButton('cancel');
  375.         button.hidden = true;
  376.         button.disabled =true;
  377.         button = wizard.getButton('back');
  378.         button.hidden = true;
  379.         button.disabled =true;
  380.     }
  381. }
  382.  
  383. function NewPinVerifiedAdvance(){
  384.     if(gWizardMode == "normal")
  385.         return true;
  386.     else {
  387.         window.arguments[2].doSync = true;
  388.         window.close();
  389.     }
  390.     return true;
  391. }
  392.  
  393. function SetProfileValue() {
  394.     Xmarks.LogWrite("Setting profile value...");
  395.     Xmarks.gSettings.viewId = document.getElementById("profileMenuList").value;
  396.     Xmarks.gSettings.viewName = document.getElementById("profileMenuList").label;
  397.     Xmarks.LogWrite("Profle value is now " + Xmarks.gSettings.viewId);
  398. }
  399.  
  400. function SyncOptionAdvance() {
  401.     var wizard = document.documentElement;
  402.     wizard.currentPage.next = SetupIsMerging() ? "mergeOption" : "execute";
  403.     return true;
  404. }
  405.  
  406. function FoxmarksSetupHelp() {
  407.     if (gHelpUrl) {
  408.         Xmarks.OpenInNewWindow(gHelpUrl);
  409.     }
  410. }
  411.  
  412. function SetupIsMerging() {
  413.     return !gIsEmpty && 
  414.         document.getElementById("localOrRemote").selectedItem.value == "merge";
  415. }
  416. // Skip over merge options if the user hasn't selected merge.
  417. function SetupOptionNext() {
  418.     document.documentElement.getPageById("selectSyncOption").next = 
  419.         SetupIsMerging() ? "mergeOption" : "execute";
  420.     return true;
  421. }
  422.  
  423. function SetupShowExecutePage() {
  424.     var op;
  425.     var a = document.getElementById("localOrRemote").selectedItem.value;
  426.     var b = document.getElementById("mergeStart").selectedItem.value;
  427.     var desc = document.getElementById("readydesc");
  428.  
  429.     if(Xmarks.gSettings.isSyncEnabled("passwords"))
  430.         desc.setAttribute("value", Xmarks.Bundle().
  431.         GetStringFromName("label.syncinitial"));
  432.  
  433.     if (gIsEmpty) {
  434.         op = "msg.upload2";
  435.     } else {
  436.         if (a == "local") {
  437.             op = "msg.upload2";
  438.         } else if (a == "remote") {
  439.             op = "msg.download2";
  440.         } else {
  441.             if (b == "local") {
  442.                 op = "msg.mergelocal";
  443.             } else {
  444.                 op = "msg.mergeremote";
  445.             }
  446.         }
  447.     }
  448.     var datatype = "";
  449.     
  450.     if(Xmarks.gSettings.isSyncEnabled("bookmarks") &&
  451.             Xmarks.gSettings.isSyncEnabled("passwords")){
  452.         datatype = Xmarks.Bundle().GetStringFromName("msg.merge.alldata");
  453.     } else if(Xmarks.gSettings.isSyncEnabled("bookmarks")){
  454.         datatype = Xmarks.Bundle().GetStringFromName("msg.merge.bookmarks");
  455.     } else {
  456.         datatype = Xmarks.Bundle().GetStringFromName("msg.merge.passwords");
  457.     }
  458.     document.getElementById("operation").value =
  459.         Xmarks.Bundle().formatStringFromName(op,[datatype],1);
  460.     var warning = document.getElementById("warning");
  461.     if (!gIsEmpty && a != "merge") {
  462.         if(warning.childNodes.length > 0){
  463.             warning.removeChild(warning.firstChild);
  464.         }
  465.  
  466.         var wtext = document.createTextNode(
  467.              Xmarks.Bundle().formatStringFromName(op + ".warning",
  468.                 [datatype], 1)
  469.         );
  470.         warning.appendChild(wtext)
  471.         warning.hidden = false;
  472.     } else {
  473.         warning.hidden = true
  474.     }
  475.     var profileMsg = document.getElementById("profileMsg");
  476.     if (gHasProfiles && Xmarks.gSettings.viewId) {
  477.         profileMsg.value = Xmarks.Bundle().formatStringFromName("msg.profilemsg",
  478.             [gProfileNames[String(Xmarks.gSettings.viewId)]], 1);
  479.         profileMsg.hidden = false;
  480.     } else {
  481.         profileMsg.hidden = true;
  482.     }
  483. }
  484.  
  485. function SetupPerformSync() {
  486.     var retval = {}
  487.     var args = {};
  488.  
  489.     var a = document.getElementById("localOrRemote").selectedItem.value;
  490.     var b = document.getElementById("mergeStart").selectedItem.value;
  491.  
  492.     args.merge = SetupIsMerging();
  493.     args.remoteIsMaster = gIsEmpty ? false :
  494.         (args.merge ? (b == "remote") : (a == "remote"));
  495.  
  496.     SetupPerformAction("initialSync", retval, args);
  497.  
  498.     if (!retval.status) {
  499.         return true;
  500.     } else {
  501.         Xmarks.Alert(Xmarks.Bundle().formatStringFromName("msg.syncfailed",
  502.                 [retval.msg], 1));
  503.     }
  504.  
  505.     return false;
  506. }
  507.  
  508. function SetupPerformAction(action, retval, args) {
  509.     var win = window.
  510.             openDialog("chrome://foxmarks/content/foxmarks-progress.xul",
  511.             "_blank", "chrome,dialog,modal,centerscreen", action, retval, args);
  512.  
  513.     if (retval.helpurl) {
  514.         openDialog("chrome://browser/content/browser.xul", "_blank",
  515.             "chrome,all,dialog=no", retval.helpurl);
  516.         retval.status = -1;
  517.         retval.msg = Xmarks.Bundle().GetStringFromname("msg.cancelled");
  518.     }
  519.  
  520.     return;
  521. }
  522.  
  523. function SetupOnWizardFinish() {
  524.     Xmarks.gSettings.majorVersion = 3;
  525.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  526.         getService(Ci.nsIFoxmarksService);
  527.     fms.launchSuccessPage();
  528.     return true;
  529. }
  530.  
  531. function OnPageShow(pageId) {
  532.     var attrs = [];
  533.     attrs.push("app="       + "jezebel");
  534.     attrs.push("mid="       + Xmarks.gSettings.machineId);
  535.     attrs.push("sess="      + Xmarks.gSettings.sessionID);
  536.     attrs.push("page="      + pageId);
  537.     attrs.push("username="  + Xmarks.gSettings.username);
  538.     attrs.push("no_cache="  + Date.now().toString(36));
  539.     attrs.push("manual="    + window.arguments[0]);
  540.  
  541.     var query = attrs.join("&");
  542.     var img = document.getElementById(pageId + "Ping");
  543.     img.src = Xmarks.gSettings.httpProtocol + "tr.xmarks.com/tracking/impressions.gif?" + query;
  544. }
  545. function FoxmarksMoreSecurityInfo(){
  546.     window.openDialog(
  547.         "chrome://foxmarks/content/foxmarks-moresecurityinfo.xul",
  548.         "_blank",
  549.         "chrome,dialog,modal,centerscreen"
  550.     );
  551. }
  552.